package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ICompanySaleUserDAO;
import org.jsola.hr.dto.CompanySaleUserAddDTO;
import org.jsola.hr.dto.CompanySaleUserUpdateDTO;
import org.jsola.hr.entity.CompanySaleUserDO;
import org.jsola.hr.query.CompanySaleUserQuery;
import org.jsola.hr.vo.CompanySaleUserListVO;
import org.jsola.hr.vo.CompanySaleUserVO;
import org.jsola.hr.vo.CompanyVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 用工单位销售
 *
 * @author zhr
 */
public interface ICompanySaleUserService extends IService<ICompanySaleUserDAO, CompanySaleUserDO> {

    /**
     * 新增用工单位销售
     *
     * @param companySaleUserAddDTO 新增用工单位销售DTO
     * @param tokenUser             当前用户
     * @return 用工单位销售详情信息
     */
    CompanySaleUserVO save(CompanySaleUserAddDTO companySaleUserAddDTO, TokenUser tokenUser);

    /**
     * 修改用工单位销售
     *
     * @param companySaleUserUpdateDTO 修改用工单位销售DTO
     * @param tokenUser                当前用户
     * @return 更新数量
     */
    int update(CompanySaleUserUpdateDTO companySaleUserUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除用工单位销售，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser          当前用户
     * @param companySaleUserIds 用工单位销售id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... companySaleUserIds);

    /**
     * 根据用工单位销售id查找
     *
     * @param companySaleUserId 用工单位销售id
     * @param siteId            所属站点id
     * @return 用工单位销售详情信息
     */
    CompanySaleUserVO selectById(String companySaleUserId, String siteId);

    /**
     * 查询用工单位销售
     *
     * @param companySaleUserQuery 查询条件
     * @param siteId               所属站点id
     * @return 用工单位销售列表信息
     */
    List<CompanySaleUserListVO> select(CompanySaleUserQuery companySaleUserQuery, String siteId);

    /**
     * 查询用工单位销售记录数
     *
     * @param companySaleUserQuery 查询条件
     * @param siteId               所属站点id
     * @return 用工单位销售记录数
     */
    int selectCount(CompanySaleUserQuery companySaleUserQuery, String siteId);

    /**
     * 分页查询用工单位销售
     *
     * @param companySaleUserQuery 查询条件
     * @param siteId               所属站点id
     * @return 用工单位销售列表信息
     */
    Page<CompanySaleUserListVO> selectPage(CompanySaleUserQuery companySaleUserQuery, String siteId);


    /**
     * 根据用工单位销售id查找
     *
     * @param companySaleUserId 用工单位销售id
     * @param siteId            所属站点id
     * @return 用工单位销售
     */
    CompanySaleUserDO selectDOById(String companySaleUserId, String siteId);

    /**
     * 查询用工单位销售
     *
     * @param companySaleUserQuery 查询条件
     * @param siteId               所属站点id
     * @return 用工单位销售列表
     */
    List<CompanySaleUserDO> selectDO(CompanySaleUserQuery companySaleUserQuery, String siteId);

    /**
     * 批量保存
     *
     * @param saleUserList 保存列表
     * @param tokenUser    当前用户
     */
    void bachSave(List<CompanySaleUserAddDTO> saleUserList, TokenUser tokenUser);

    /**
     * 查询对应用工单位下的销售
     *
     * @param companyId 用工单位Id
     * @param siteId    站点
     * @return 销售
     */
    List<CompanySaleUserDO> selectSaleUserByCompanyId(String companyId, String siteId);

    /**
     * 批量保存
     *
     * @param saveList 保存列表
     */
    void bachSave(List<CompanySaleUserDO> saveList);

    /**
     * 删除对应用工单位销售的关联关系
     *
     * @param companyId 用工单位Id
     * @param tokenUser 当前用户
     */
    void deleteFromCompany(String companyId, TokenUser tokenUser);

    /**
     * 查询销售绑定的用工单位
     *
     * @param userId    userId
     * @param tokenUser 当前用户
     * @return 用工单位
     */
    List<CompanyVO> selectCompanyBySaleUserId(String userId, TokenUser tokenUser);
}


